package com.chengv.redismq.util;

import cn.hutool.core.collection.CollUtil;
import org.springframework.aop.framework.AopProxyUtils;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 方法工具类
 *
 * @author chengv
 */
public class MethodUtils {

    /**
     * 获取方法全名。例如：com.chengv.util.MethodUtils#getFullName(Object, Method)
     *
     * @param bean   类
     * @param method 方法
     * @return 方法全名
     */
    public static String getFullName(Object bean, Method method) {
        Class<?> beanClass = AopProxyUtils.ultimateTargetClass(bean);
        List<String> parameterTypeNames = Arrays.stream(method.getParameterTypes()).map(Class::getName)
                .collect(Collectors.toList());
        return String.format("%s#%s(%s)", beanClass.getName(), method.getName(),
                CollUtil.join(parameterTypeNames, ", "));
    }
}
